<?php
/**
 * Created by PhpStorm.
 * User: mayn
 * Date: 2018/8/27
 * Time: 11:00
 */

namespace app\api\models;


use yii\base\Model;
use Cm;
class BaseModel extends Model
{
    public $wx_account_id = null;
    public $company_id = null;
    public $wx_app_id = null;
    public function __construct(array $config = [])
    {
        parent::__construct($config);
        $this->wx_app_id = Cm::$req->post('appid', ['reg'=>'/^[0-9A-Za-z]{1,}/', 'title'=>'微信公总号APPID']);
        $result = Cm::$db->one("
        SELECT a.id,c.company_id FROM `scrm_weixin_account` as a 
        INNER JOIN scrm_weixin_company_account as c on a.id=c.wx_account_id
        WHERE a.accountappid='{$this->wx_app_id}'");


        if ($result) {
            $this->wx_account_id = $result['id'];
            $this->company_id = $result['company_id'];
        } else {
           Cm::$res->error('未找到绑定的公众号');
        }

    }

    public function getDate($type ='' )
    {
        $date = [
            'yesterday'=>[
                'start'=>date("Y-m-d 00:00:00", strtotime("-1 day")),
                'end'=>date("Y-m-d 23:59:59", strtotime("-1 day")),
            ],
            'nearly_a_week'=>[
                'start'=>date("Y-m-d H:i:s", strtotime("-7 day")),
                'end'=>date("Y-m-d 23:59:59", strtotime("-1 day")),
            ],
            'nearly_a_month'=>[
                'start'=>date("Y-m-d H:i:s", strtotime("-30 day")),
                'end'=>date("Y-m-d 23:59:59", strtotime("-1 day")),
            ],
        ];

        if (!empty($type) && isset($date[$type])) {
            return $date[$type];
        }

        return $date;
    }

    /**
     * 获取比例数据：
     * @param string $type
     * @return array
     */
    public function getDates($type ='' )
    {
        $date = [
            'yesterday'=>[
                's'=>[
                    'start'=>date("Y-m-d 00:00:00", strtotime("-1 day")),
                    'end'=>date("Y-m-d 23:59:59", strtotime("-1 day")),
                ],
                'e'=>[
                    'start'=>date("Y-m-d 00:00:00", strtotime("-2 day")),
                    'end'=>date("Y-m-d 23:59:59", strtotime("-2 day")),
                ],


            ],
            'week'=>[
                's'=>[
                    'start'=>date("Y-m-d H:i:s", strtotime("-7 day")),
                    'end'=>date("Y-m-d 23:59:59", strtotime("-1 day")),
                ],
                'e'=>[
                    'start'=>date("Y-m-d H:i:s", strtotime("-14 day")),
                    'end'=>date("Y-m-d 23:59:59", strtotime("-7 day")),
                ],

            ],
            'month'=>[
                's'=>[
                    'start'=>date("Y-m-d H:i:s", strtotime("-30 day")),
                    'end'=>date("Y-m-d 23:59:59", strtotime("-1 day")),
                ],
                'e'=>[
                    'start'=>date("Y-m-d H:i:s", strtotime("-60 day")),
                    'end'=>date("Y-m-d 23:59:59", strtotime("-30 day")),
                ]

            ],
        ];
        return $date;
    }

    /**
     * 获取用户关注公总号来源
     * @param $subscribe_scene
     * @return int
     * 返回用户关注的渠道来源，
     * ADD_SCENE_SEARCH 公众号搜索，
     * ADD_SCENE_ACCOUNT_MIGRATION 公众号迁移，
     * ADD_SCENE_PROFILE_CARD 名片分享，
     * ADD_SCENE_QR_CODE 扫描二维码，
     * ADD_SCENEPROFILE LINK 图文页内名称点击，
     * ADD_SCENE_PROFILE_ITEM 图文页右上角菜单，
     * ADD_SCENE_PAID 支付后关注，ADD_SCENE_OTHERS 其他
     */
    public static function getSubscribeScene($subscribe_scene)
    {
        switch (trim($subscribe_scene)) {
            case 'ADD_SCENE_SEARCH':#公众号搜索
                $type = 0;
                break;
            case 'ADD_SCENE_ACCOUNT_MIGRATION':# 公众号迁移
                $type = 1;
                break;
            case 'ADD_SCENE_PROFILE_CARD':#名片分享
                $type = 2;
                break;
            case 'ADD_SCENEPROFILE LINK':#图文页内名称点击
                $type = 3;
                break;
            case 'ADD_SCENE_QR_CODE':#扫描二维码
                $type = 4;
                break;
            case 'ADD_SCENE_PROFILE_ITEM':#图文页右上角菜单
                $type = 5;
                break;
            case 'ADD_SCENE_PAID':#支付后关注
                $type = 6;
                break;
            default:
                $type = 7;
                break;
        }
        return $type;
    }

    /**
     * 获取用户关注公总号来源
     * @param $subscribe_scene
     * @return int
     * 返回用户关注的渠道来源，
     * ADD_SCENE_SEARCH 公众号搜索，
     * ADD_SCENE_ACCOUNT_MIGRATION 朋友圈广告，
     * ADD_SCENE_PROFILE_CARD 名片分享，
     * ADD_SCENE_QR_CODE 扫描二维码，
     * ADD_SCENEPROFILE_LINK 图文页内名称点击，
     * ADD_SCENE_PROFILE_ITEM 图文页右上角菜单，
     * ADD_SCENE_PAID 支付后关注，
     * ADD_SCENEPROFILE_ADVERT 公众号文章广告，
     * ADD_SCENE_OTHERS 其他
     */
    public static function getSubscribeSceneTotal($subscribe_scene)
    {
        switch (trim($subscribe_scene)) {
            case 'ADD_SCENE_SEARCH':#公众号搜索
                $type = 0;
                break;
            case 'ADD_SCENE_ACCOUNT_MIGRATION':# 公众号迁移
                $type = 1;
                break;
            case 'ADD_SCENE_PROFILE_CARD':#名片分享
                $type = 2;
                break;
            case 'ADD_SCENEPROFILE_LINK':#图文页内名称点击
                $type = 3;
                break;
            case 'ADD_SCENE_QR_CODE':#扫描二维码
                $type = 4;
                break;
            case 'ADD_SCENE_PROFILE_ITEM':#图文页右上角菜单
                $type = 5;
                break;
            case 'ADD_SCENE_PAID':#支付后关注
                $type = 6;
                break;
            default:#其他
                $type = 7;
                break;
        }
        return $type;
    }

    /**
     * @param $filesize
     * @return string
     */
    public function sizeCount($filesize)
    {
        if($filesize >= 1048576) {
            $filesize = round($filesize / 1048576 * 100) / 100 . ' mb';
        } elseif($filesize >= 1024) {
            $filesize = round($filesize / 1024 * 100) / 100 . ' kb';
        } else {
            $filesize = $filesize . ' bytes';
        }
        return $filesize;
    }

    /**
     * @param $filesize
     * @return float|int
     */
    public function sizeToMB($filesize)
    {
        //return  round($filesize / 1024 * 100) / 100;
        return  round($filesize / 1048576 * 100) / 100 ;
    }

    /**
     * 获取秒+毫秒
     * @return float
     */
    function msectime() {
        list($msec, $sec) = explode(' ', microtime());
        $msectime =  (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
        return $msectime;
    }

    /**
     * 返回数组中指定的一列
     * @param $input            需要取出数组列的多维数组（或结果集）
     * @param $columnKey        需要返回值的列，它可以是索引数组的列索引，或者是关联数组的列的键。 也可以是NULL，此时将返回整个数组（配合index_key参数来重置数组键的时候，非常管用）
     * @param null $indexKey    作为返回数组的索引/键的列，它可以是该列的整数索引，或者字符串键值。
     * @return array            返回值
     */
    function _array_column($input, $columnKey, $indexKey = null)
    {
        if (!function_exists('array_column')) {
            $columnKeyIsNumber = (is_numeric($columnKey)) ? true : false;
            $indexKeyIsNull = (is_null($indexKey)) ? true : false;
            $indexKeyIsNumber = (is_numeric($indexKey)) ? true : false;
            $result = array();
            foreach ((array)$input as $key => $row) {
                if ($columnKeyIsNumber) {
                    $tmp = array_slice($row, $columnKey, 1);
                    $tmp = (is_array($tmp) && !empty($tmp)) ? current($tmp) : null;
                } else {
                    $tmp = isset($row[$columnKey]) ? $row[$columnKey] : null;
                }
                if (!$indexKeyIsNull) {
                    if ($indexKeyIsNumber) {
                        $key = array_slice($row, $indexKey, 1);
                        $key = (is_array($key) && !empty($key)) ? current($key) : null;
                        $key = is_null($key) ? 0 : $key;
                    } else {
                        $key = isset($row[$indexKey]) ? $row[$indexKey] : 0;
                    }
                }
                $result[$key] = $tmp;
            }
            return $result;
        } else {
            return array_column($input, $columnKey, $indexKey);
        }
    }

    /**
     * 判断数组维度
     * @param $array
     * @return int
     */
    public static function array_depth($array)
    {
        if (!is_array($array)) {
            return 0;
        }

        $max_depth = 1;
        foreach ($array as $value) {
            if (is_array($value)) {
                $depth = self::array_depth($value) + 1;

                if ($depth > $max_depth) {
                    $max_depth = $depth;
                }
            }
        }
        return $max_depth;
    }

    public function get($key=null, $default='')
    {
        return $key ? \Yii::$app->request->get($key, $default) : \Yii::$app->request->get();
    }
    public function post($key=null, $default='')
    {
        return $key ? \Yii::$app->request->post($key, $default) : \Yii::$app->request->post();
    }
}